#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#pragma once
#include"sessionfriendarea.h"
#include"messageshowarea.h"
#include"messageeditarea.h"
#include"selfinfowidget.h"
#include"sessiondetailwidget.h"
#include"addfrienddialog.h"
#include"groupsessiondetailwidget.h"
#include"model/datacenter.h"

#include <QWidget>
#include<QGraphicsDropShadowEffect>
#include<QHBoxLayout>
#include<QPushButton>
#include<QVBoxLayout>
#include<QMouseEvent>
#include<QLineEdit>
#include<QLabel>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    ~MainWidget();
    static MainWidget* getInstance();

    virtual void mousePressEvent(QMouseEvent* event) override;
    virtual void mouseMoveEvent(QMouseEvent* event) override;


private:
    Ui::MainWidget *ui;

    static MainWidget* instance;

    //阴影
    QGraphicsDropShadowEffect *shadowEffect;
    //计算鼠标和左顶点坐标的相对距离
    QPoint dragPosition;

    //主布局管理器
    QHBoxLayout* mainLayout;

    QWidget* windowLeft;  //左窗口
    QWidget* windowMid;   //中间窗口
    QWidget* windowRight; //右边窗口

    // ⽤⼾头像
    QPushButton* userAvatar;
    // tab 按钮
    QPushButton* sessionTabBtn;
    QPushButton* friendTabBtn;
    QPushButton* applyTabBtn;

    // 搜索框
    QLineEdit* searchEdit;
    // 添加好友按钮
    QPushButton* addFriendBtn;
    // 显⽰会话列表和好友列表的
    SessionFriendArea* sessionFriendArea;


    // 右侧窗⼝上⽅的会话标题
    QLabel* sessionTitle;
    //关闭按钮
    QPushButton* closeBtn;
    //最大化按钮
    QPushButton* maxBtn;
    //最小化按钮
    QPushButton* minBtn;
    // 右侧上⽅的会话详情按钮
    QPushButton* extraBtn;
    // 右侧窗⼝中间的消息显⽰区
    MessageShowArea* messageShowArea;
    // 右侧窗⼝下⽅的消息编辑区
    MessageEditArea* messageEditArea;

    // 描述当前激活的标签⻚
    enum ActiveTab {
        SESSION_LIST, // 会话列表
        FRIEND_LIST, // 好友列表
        APPLY_LIST // 好友申请列表
    };
    ActiveTab activeTab = SESSION_LIST;
    ActiveTab getActiveTab();


    MainWidget(QWidget *parent = nullptr);
    //初始化界面
    void initUI();
    //初始化整体窗⼝布局
    void initMainWindow();
    //初始化左窗口
    void initWindowLeft();
    //初始化中间窗口
    void initWindowMid();
    //初始化右窗口
    void initWindowRight();
    //初始化数据
    void initData();

    //切换到会话列表
    void switchTabToSession();
    //切换到好友列表
    void switchTabToFriend();
    //切换到好友申请列表
    void switchTabToApply();
public:
    //切换到会话
    void switchToSession(const QString& userId);

    //初始化好友列表
    void loadFriendList();
    void updateFriendList();

    //初始化会话列表
    void loadSessionList();
    void updateSessionList();

    //初始化好友申请列表
    void loadApplyList();
    void updateApplyList();

    //初始化当前会话的消息内容
    void loadRecentMessages(const QString& chatSessionId);
    void updateRencentMessages(const QString& chatSessionId);

    //获取到消息展示区的指针
    MessageShowArea* getMessageShowArea();

};
#endif // MAINWIDGET_H
